/* ==================================================================   
 * Created [2009-4-27 下午11:32:55] by Jon.King 
 * ==================================================================  
 * TSS 
 * ================================================================== 
 * mailTo:jinpujun@hotmail.com
 * Copyright (c) Jon.King, 2009-2012 
 * ================================================================== 
 */

package com.jinhe.tss.portal.entity;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.dom4j.Document;

import com.jinhe.tss.core.cachepool.AbstractCacheableKey;
import com.jinhe.tss.core.cachepool.CacheableKey;
import com.jinhe.tss.core.persistence.IEntity;
import com.jinhe.tss.core.sso.Environment;

/**
 * 门户实体：包括基本信息及主题信息等
 */
@Entity
@Table(name = "pms_portal")
@SequenceGenerator(name = "portal_sequence", sequenceName = "portal_sequence", initialValue = 1, allocationSize = 1)
public class Portal implements IEntity {
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "portal_sequence")
	private Long    id;
	
	private Long    themeId;    // 默认主题编号
	private String  themeName;  // 默认主题名称（默认为：XXXX(门户名称)的主题）
	
    private Long    currentThemeId;    // 当前主题编号
    private String  currentThemeName;  // 当前主题名称（默认为：XXXX(门户名称)的主题）
    
    @Transient private String  name;
    @Transient private Long personalThemeId;  // 用户个性化定制的主题
    @Transient private List<Document> personalPageXMLs; // 用户个性化定制的门户各个页面的配置XML列表

    public List<Document> getPersonalPageXMLs() {
        if(personalPageXMLs == null) {
            personalPageXMLs = new ArrayList<Document>();
        }
        return personalPageXMLs;
    }

    /**
     * 获取用户自定义的主题ID，如果为空则返回默认主题ID
     * @return
     */
    public Long getPersonalThemeId() {
        return personalThemeId != null ? personalThemeId : themeId;
    }

    public void setPersonalThemeId(Long personalThemeId) {
        this.personalThemeId = personalThemeId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    /**
     * 门户缓存池Key值实体。
     * 包含了门户的名称，Id以及主题名称和ID信息。
     * @return
     */
    public CacheableKey getDefaultKey(){
        return new AbstractCacheableKey(){
            private static final long serialVersionUID = -2568028025542451100L;
            
            public String getKey() {
                return Portal.this.id + "_" + Portal.this.getPersonalThemeId();
            }
            
            public String getName() {
                return Portal.this.getName();
            }
            
            public String getRemark() {
                return  "主题：" + Portal.this.themeName;
            }
        };
    }
    
    /**
     * 获取个性化定制门户缓存池Key值实体。
     * 包含了门户的名称和Id、主题名称和ID信息、执行该个性化定制的用户信息。
     * @return
     */
    public CacheableKey getPersonalKey(){
        return new AbstractCacheableKey(){
            private static final long serialVersionUID = 1650983464853324828L;
            
            public String getKey() {
                return Portal.this.id + "_" + Portal.this.getPersonalThemeId() + "_" + Environment.getOperatorId();
            }
            
            public String getName() {
                return Portal.this.getName();
            }
            
            public String getRemark() {
                return "主题：" + Portal.this.themeName + "，用户：" + Environment.getOperatorName();
            }
        };
    }
 
	public Long getId() {
		return id;
	}
 
	public void setId(Long id) {
		this.id = id;
	}
 
	public Long getThemeId() {
		return themeId;
	}
 
	public void setThemeId(Long themeId) {
		this.themeId = themeId;
	}
 
	public String getThemeName() {
		return themeName;
	}
 
	public void setThemeName(String themeName) {
		this.themeName = themeName;
	}
 
    public Long getCurrentThemeId() {
        return currentThemeId;
    }
 
    public String getCurrentThemeName() {
        return currentThemeName;
    }
 
    public void setCurrentThemeId(Long currentThemeId) {
        this.currentThemeId = currentThemeId;
    }
 
    public void setCurrentThemeName(String currentThemeName) {
        this.currentThemeName = currentThemeName;
    }
}
